-define(OPTIONS, [
  {buffer,                 global,  "--buffer",               [{{erlang, is_integer}, to_arg}]},
  {input_buffer,           global,  "--input-buffer",         [{{erlang, is_integer}, to_arg}]},
  {clobber,                global,  "--clobber",              [{{vice_prv_options, is_true}, to_nothing}]},
  {combine,                global,  "--combine",              [{{vice_prv_options, is_in, [concatenate, merge, mix, 'mix-power', multiply, sequence]}, to_arg}]},
  {no_dither,              global,  "--no-dither",            [{{vice_prv_options, is_true}, to_nothing}]},
  {effects_file,           global,  "--effects-file",         [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}]},
  {guard,                  global,  "--guard",                [{{vice_prv_options, is_true}, to_nothing}]},
  {magic,                  global,  "--magic",                [{{vice_prv_options, is_true}, to_nothing}]},
  {multi_threaded,         global,  "--multi-threaded",       [{{vice_prv_options, is_true}, to_nothing}]},
  {single_threaded,        global,  "--single_threaded",      [{{vice_prv_options, is_true}, to_nothing}]},
  {norm,                   global,  "--norm",                 [{{vice_prv_options, is_true}, to_nothing}, {{erlang, is_integer}, to_equal_arg}]},
  {play_rate_arg,          global,  "--play-rate-arg",        [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}]},
  {plot,                   global,  "--plot",                 [{{vice_prv_options, is_in, [gnuplot, octave, off]}, to_arg}]},
  % --no-show-progress
  {repeatable,             global,  "-R",                     [{{vice_prv_options, is_true}, to_nothing}]},
  {replay_gain,            global,  "--replay-gain",          [{{vice_prv_options, is_in, [track, album, off]}, to_arg}]},
  {show_progress,          global,  "--show-progress",        [{{vice_prv_options, is_true}, to_nothing}]},
  {temp,                   global,  "--temp",                 [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}]},

  {ignore_length,          input,   "--ignore-length",        [{{vice_prv_options, is_true}, to_nothing}]},
  {volume,                 input,   "--volume",               [{{erlang, is_float}, to_arg}]},
  {input_bits,             input,   "--bits",                 [{{erlang, is_integer}, to_arg}]},
  {input_channels,         input,   "--channels",             [{{erlang, is_integer}, to_arg}]},
  {input_encoding,         input,   "--encoding",             [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}]},
  {input_rate,             input,   "--rate",                 [{{erlang, is_integer}, to_arg}]},
  {input_rate_k,           input,   "--rate",                 [{{erlang, is_integer}, to_karg}]},
  {input_type,             input,   "--type",                 [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}, {{erlang, to_atom}, to_arg}]},
  {input_endian,           input,   "--endian",               [{{vice_prv_options, is_in, [little, big, swap]}, to_arg}]},
  {input_reverse_nibbles,  input,   "--reverse-nibbles",      [{{vice_prv_options, is_true}, to_nothing}]},
  {input_reverse_bits,     input,   "--reverse-bits",         [{{vice_prv_options, is_true}, to_nothing}]},

  {output_encoding,        output,  "--encoding",             [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}]},
  {output_bits,            output,  "--bits",                 [{{erlang, is_integer}, to_arg}]},
  {output_channels,        output,  "--channels",             [{{erlang, is_integer}, to_arg}]},
  {output_rate,            output,  "--rate",                 [{{erlang, is_integer}, to_arg}]},
  {output_rate_k,          output,  "--rate",                 [{{erlang, is_integer}, to_karg}]},
  {output_type,            output,  "--type",                 [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}, {{erlang, to_atom}, to_arg}]},
  {output_endian,          output,  "--endian",               [{{vice_prv_options, is_in, [little, big, swap]}, to_arg}]},
  {output_reverse_nibbles, output,  "--reverse-nibbles",      [{{vice_prv_options, is_true}, to_nothing}]},
  {output_reverse_bits,    output,  "--reverse-bits",         [{{vice_prv_options, is_true}, to_nothing}]},
  {add_comment,            output,  "--add-comment",          [{{erlang, is_list}, to_quote_arg}, {{erlang, is_binary}, to_quote_arg}]},
  {comment,                output,  "--comment",              [{{erlang, is_list}, to_quote_arg}, {{erlang, is_binary}, to_quote_arg}]},
  {comment_file,           output,  "--comment-file",         [{{erlang, is_list}, to_quote_arg}, {{erlang, is_binary}, to_quote_arg}]},
  {compression,            output,  "--compression",          [{{erlang, is_integer}, to_arg}]},

  {effects,                effects, "",                       [{{erlang, is_list}, to_arg}, {{erlang, is_binary}, to_arg}]}
]).
